import sun.awt.windows.WPrinterJob;

/**
 * Created with IntelliJ IDEA.
 * Description：
 * User：user
 * DATE:2021-10-31
 * Time:12:51
 */
class Person implements Cloneable{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class TestDemo2 {

    public static void function(){
        int[] array = {1,2,3,4,5};
        System.out.println(array[100]);
    }

    public static void main(String[] args) {
        //异常处理会不断向上传递直至处理完成，直至jvm，会终止程序
        try{
            function();
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }

    }



    //防御式异常
    //Look before you lead 操作之前充分检查
    //事后处理异常

    //catch进行捕获异常的时候，要从上往下不要从父类开始，也不会同时捕获两个异常
    //可以用一个异常捕获所有的异常但是不推荐
    public static void main5(String[] args) {
        int[] array = null;
        try{
            //存放可能出现的错误异常
            System.out.println(array.length);
        }catch(NullPointerException e){
            System.out.println("空指针异常");
            e.printStackTrace();//打印报错信息
        }catch (ArithmeticException | ArrayIndexOutOfBoundsException e){
            //多个捕捉
            System.out.println("数组下标越界异常");
            e.printStackTrace();
        }finally{
            //不管是否抛出异常 finally一定是会执行的
            //不要再finall严重使用
            System.out.println("关闭文件");
        }
    }

    public static void main4(String[] args) throws CloneNotSupportedException {
        Person person = new Person();
        Person person2 = (Person)person.clone();
    }


    //栈溢出错误
    //出现错误 逻辑错误  程序员自己解决比较麻烦


    public static void main3(String[] args) {
        NullPointerException n;
    }


    /*
    java中的异常种类有很多
    注意要进行异常的种类分类，了解异常分类
    受查异常：编译时异常，编译异常必须进行处理之后才能运行代码
    非受查异常：运行时异常
    Throwable
    Error Execption(其他异常 RunTimeExecption)
     */
    public static void main2(String[] args) {
        int[] array = null;
        System.out.println(array.length);//程序抛出异常之后程序员没有处理异常程序就不会执行程序中止了，后买后面的代码不会执行
        //此时会交给jvm处理，一旦交给jvm处理就会中止程序
        System.out.println("gaobo");
    }
    public static void main1(String[] args) {
        System.out.println(10/0);//除o异常之后代码不执行
        System.out.println("hang");
    }
}
